import numpy as np
from tsensor import explain as exp

# Прямой проход через первый слой простой нейронной сети (forwardPass).

"""
Входные данные для нейронной сети.
Создает массив NumPy x_input размером 5x1 (5 строк, 1 столбец).
В каждой строке содержится одно число: 10, 20, -20, -40 и -3 соответственно. 
"""
# Создание входных данных (Create Input Data)
x_input = np.array([[10], [20], [-20], [-40], [-3]])

"""
Создание весов и смещений первого слоя

l1_weights = np.array([[.73, .2]]):
* Создает массив весов l1_weights размером 1x2, содержащий коэффициенты для линейного преобразования во входном слое нейронной сети. В данном случае, это веса для связи единственного входного нейрона с двумя нейронами следующего слоя.

l1_bias = np.array([[4, 2]]):
*Создает массив смещений l1_bias размером 1x2, содержащий значения смещения для двух нейронов следующего слоя. Смещения добавляются к взвешенной сумме входных значений, влияя на выход нейронов.
"""
# 1x2 weight matrix
l1_weights = np.array([[.73, .2]])

# 1x2 bias matrix
l1_bias = np.array([[4, 2]])
"""
Вычисление выхода первого слоя

l1_output = x_input @ l1_weights + l1_bias:
* Вычисляет выход первого слоя нейронной сети l1_output.
* @: Оператор матричного умножения.
* x_input @ l1_weights: Выполняет матричное умножение входных данных x_input на матрицу весов l1_weights. Это взвешенная сумма входных значений для каждого нейрона следующего слоя.
*+ l1_bias: Добавляет к взвешенной сумме соответствующие значения смещения из l1_bias.
"""

# output
with exp() as c:
    l1_output = x_input @ l1_weights + l1_bias
